Двойные камеры OV5640

Установка модуля

Вставьте модуль в плату следующим образом, обращая внимание на то, чтобы стрелки были выровнены. Кроме того, соедините P2 с помощью перемычки на +3.3V, чтобы питание модуля было 3.3V.

image-20251124103837685

Создание нового проекта Vivado

Цель, которую мы хотим достичь, — отображать видеопоток с двух камер в реальном времени как на HDMI, так и на LCD. Подход к реализации заключается в использовании 2 модулей VDMA только для записи для передачи данных камеры в DDR, затем использование двух модулей VDMA только для чтения для извлечения данных из DDR и их отображения на HDMI и LCD соответственно через IP-ядро v_axi4s_vid_out_0 и IP-ядро v_axi4s_vid_out_1. Поскольку этот тест включает в себя как HDMI, так и LCD, нам необходимо сослаться на некоторый инженерный код из предыдущих тестов HDMI и LVGL.

Модифицируем на основе предыдущего проекта HDMI: сначала включим два вывода EMIO для подключения к интерфейсу SCCB камеры и настроим ограничения выводов следующим образом:

Измените три тактовых сигнала FCLK Zynq IP-ядра на 100, 125 и 200. Среди них FCLK_CLK2 служит тактовым сигналом для расширенного ENET1.

image-20250811094427782

Найдите vdma, чтобы добавить:

image-20250811091956366

Настройте четыре модуля vdma: два для чтения и два для записи, и установите параметры в соответствии с рисунками ниже.

Два VDMA только для чтения:

image-20250811092106050

Конфигурация двух VDMA только для записи:

image-20250811092150372

Добавьте два IP-ядра clk_wiz, одно для управления тактовой частотой дисплея HDMI и одно для управления тактовой частотой дисплея LCD. Найдите clk:

image-20250811092844993

Настройте IP clk_wiz для HDMI: установите его как динамическую тактовую частоту, управляемую шиной AXI, с входным сигналом от FCLK_CLK0 на 100 МГц:

image-20250811094619192

HDMI требует две тактовые частоты, которые имеют соотношение 5x:

image-20250811094850265

Настройте IP clk_wiz для LCD: установите его как динамическую тактовую частоту, управляемую шиной AXI, с входным сигналом от FCLK_CLK0 на 100 МГц:

image-20250811095805946

Для LCD требуется только один выход тактовой частоты:

image-20250811095908877

Обратитесь к предыдущему документу HDMI Test, чтобы добавить другие необходимые IP-ядра для отображения HDMI:

Добавьте и найдите timing core и настройте его, как показано ниже:

image-20250625140706307

image-20250625140834752

Найдите video out core и настройте его, как показано ниже:

image-20250625140915948

image-20250625141007912

Требуется пользовательское IP: dvi_transmitter. Это IP-ядро находится в папке ip_repo каталога проекта. Нам нужно добавить его в библиотеку IP проекта. В Block Design подключите сигналы интерфейса модуля DVI Transmitter и выведите внешние порты (только порты TMDS нужно выводить). Конкретный способ подключения показан на следующих рисунках:

image-20250902140426561

image-20250902140639588

 

Следуя тем же шагам, что и выше, найдите наше пользовательское IP-ядро ov5640_capture и добавьте его в библиотеку IP проекта.

image-20250828171200725

Найдите v_vid_in_axi4s. Функция этого модуля — преобразовать выход стандартного видеоформата в поток данных AXI4-Stream. Настройте его:

image-20250811102256881

image-20250811102837659

Подключите ov5640, v_vid_in_axi4s и vdma для операции чтения, как показано ниже:

image-20250828171240466

Обратитесь к документу LVGL Test, чтобы добавить модуль video out. Этот модуль преобразует поток данных AXI4-Stream в выход стандартного видеоформата, соответствующий экрану RGB LCD.

image-20250811104245419

Добавьте модуль Video Timing Controller: найдите и добавьте модуль контроллера синхронизации видео, дважды щелкните, чтобы открыть страницу конфигурации, и настройте его:

image-20250811104605009

image-20250811104629999

Добавьте модуль constant, чтобы добавить постоянное значение 1, используемое для подключения сигналов разрешения ce и aclken наших различных модулей.

image-20250811105046077

image-20250811105106316

Для последующих подключений обратитесь к документу LVGL Test. На этом этапе нажмите Run Connection Automation, чтобы автоматически подключить оставшуюся проводку. После проверки всех пунктов во всплывающем диалоговом окне настроек система автоматически подключит оставшиеся сигнальные линии и добавит необходимые модули. Итоговая сгенерированная общая блок-схема выглядит следующим образом:

image-20250902140900555

Сохраните проект, затем нажмите Source → Design Sources, щелкните правой кнопкой мыши созданный нами проект BLOCK и нажмите Create HDL Wrapper, чтобы упаковать файл BLOCK. На этом этап Block Design завершен.

 

Настройте выводы в соответствии со схематической диаграммой: Настроенный .xdc:

 

Скомпилируйте и синтезируйте проект, сгенерируйте битстрим, File→Export→Export hardware и экспортируйте файл .xsa.

Создание нового проекта Vitis

Аналогично, создайте новый проект платформы и проект приложения. Новые созданные файлы кода изменяются на основе документа 18-LVGL и кода 19-AUDIO: добавьте новый код файла, связанный с камерой: создайте новые папки emio_sccb_cfg, ov5640 и создайте новый файл xadc.c. Итоговые требуемые файлы src выглядят следующим образом:

image-20250811111256288

Измените код файла clk_wiz:

 

main.c:

 

Компиляция и отладка

Подключите HDMI, LCD и плату разработки ZYNQ.

Используйте TYPE-C для подключения порта JTAG платы разработки к компьютеру, выполните сборку и отладку, и наблюдайте за изображением на дисплее HDMI или LCD.